﻿//给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
//字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
//
//输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//输出 : [["bat"], ["nat", "tan"], ["ate", "eat", "tea"]]
//
//输入 : strs = [""]
//输出 : [[""]]
//
//输入 : strs = ["a"]
//输出 : [["a"]]
//
//提示：
//	1 <= strs.length <= 10^4
//	0 <= strs[i].length <= 100
//	strs[i] 仅包含小写字母

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> hash;
        // 1.把所有的字⺟异位词分组

        for (auto& s : strs) {
            string tmp = s;
            sort(tmp.begin(), tmp.end());
            hash[tmp].push_back(s);
        }
        // 2.结果提取出来

        vector<vector<string>> ret;
        for (auto& [x, y] : hash) {
            ret.push_back(y);
        }
        return ret;
    }
};